//VARIABLE DE FUNCIONALIDAD DEL SISTEMA
var systemFunctions = {
	cambiarUbicacion : true, // habilita la funcionalidad de cambiar de
	// almacen en las paginas diferencites a home
	actualizarPaginasOnCambiarUbicacion : true, // permite actualizar todas las
	// páginas abiertas cuando en
	// una de ellas se cambia de
	// almacen
	buildMenuOffHome : true, // permite mostrar el menÃº flotante en páginas
	// diferentes a home
	esperarAjax : true, // habilita la validación de llamadas ajax pendientes en
	// la página
	reemplazarMensajesCake : true
// reemplaza el mensaje por defecto de cake por una ventana flotante
};

// VARIABLES DE ENTORNO

var actual_search_obj = ''; // almacena el id del objeto de busqueda actual
var shortcuts_assigned = false; // indica que los shortcuts han sido asignados

// OPTIMIZANDO TYPEOF CON TYPE.OF
// devuelve el nombre del constructor del objeto. es más especifico que typeof
// uso:
// type.of('texto'); //string
// type.of(123); //number
// type.of(null); //null
// type.of(); //undefined
// type.of({}); //object
// type.of([]); //array
// type.of(/^b/); //regexp
// type.of(alert()); //function
var _type = {
	of : function(obj) {
		var type = typeof (obj);
		if (type == 'object') {
			if (obj === null) {
				return 'null';
			} else if (obj.constructor.toString().match(/regexp/i) !== null) {
				return 'regexp';
			} else if (obj.constructor.toString().match(/date/i) !== null) {
				return 'date';
			} else if (obj.constructor.toString().match(/html/i) !== null) {
				return 'html';
			} else if (obj.constructor.toString().match(/array/i) !== null
					&& typeof (obj.length) != 'undefined') {
				return 'array';
			} else {
				return 'object';
			}
		} else {
			return type;
		}
	}
};
var type = _type;

/*---------------------------------FUNCIONES VARIAS------------------------------------*/

function precision(valor, decimal) {
	valor = valor - 0;
	decimal = decimal || 2;
	if (!valor)
		valor = 0;
	return parseFloat(valor).toFixed(decimal);
}

function random(start, end) {
	if (typeof (end) == 'undefined') {
		end = start;
		start = 0;
	}
	return Math.floor(Math.random(end - start) * (end + 1));
}

// se puede pasar fechas del tipo dd/mm/yy o dd-mm-yy o Date
function IGVFecha(fecha) {
	if (typeof fecha == 'string') {
		if (fecha.indexOf('/') > -1)
			fecha = fecha.to_date('dd/mm/yy');
		else
			fecha = fecha.to_date('dd-mm-yy');
	}
	limite = '01/03/2011'.to_date('dd/mm/yy');

	return limite.dateCompare(fecha) <= 0 ? 0.18 : 0.19;
}

// obtiene las variables de url
// ejemplo http://blablalba.com?var1=2&var2=45&var3=hola
// {'var1':'2','var2':'45','var3':'hola'}
function getUrlVars() {
	var vars = [], hash;
	var hashes = window.location.href.slice(
			window.location.href.indexOf('?') + 1).split('&');
	for ( var i = 0; i < hashes.length; i++) {
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}
	return vars;
}

// EXTENSIONES AJAX
// serializar objetos de formulario a json
$.fn.serializeObject = function() {
	var o = {};
	var a = this.serializeArray();
	$.each(a, function() {
		if (o[this.name]) {
			if (!o[this.name].push) {
				o[this.name] = [ o[this.name] ];
			}
			o[this.name].push(this.value || '');
		} else {
			o[this.name] = this.value || '';
		}
	});
	return o;
};

// serializar cualquier lista de objetos
$.fn.serializeThis = function() {
	return $(this).find('[name]:input').clone().wrap('<form>').serialize();
};

// AGREGANDO SOPORTE PARA INDEXOF (IE)
if (!Array.prototype.indexOf) {
	Array.prototype.indexOf = function(elt /* , from */) {
		var len = this.length;

		var from = Number(arguments[1]) || 0;
		from = (from < 0) ? Math.ceil(from) : Math.floor(from);
		if (from < 0)
			from += len;

		for (; from < len; from++) {
			if (from in this && this[from] === elt)
				return from;
		}
		return false;
	};
}

// CAMELCASE TIPO CAKE
// cambiar texto de tipo 'usuario_id' a 'Usuario Id'
// uso:
// 'texto_cualquiera'.toCamel() --> 'TextoCualquiera'
String.prototype.toCamel = function() {
	return this.replace(/(^[a-z]|\_[a-z])/g, function($1) {
		return $1.toUpperCase().replace('_', ' ');
	});
};
// SOPORTE TRIM PARA NAVEGADORES DESCONTINUADOS
String.prototype.trim = function() {
	return (this.replace(/^[\s\xA0]+/, "").replace(/[\s\xA0]+$/, ""));
};
// CADENA INICIA CON
String.prototype.startsWith = function(str) {
	return (this.match("^" + str) == str);
};
// CADENA TERMINA EN
String.prototype.endsWith = function(str) {
	return (this.match(str + "$") == str);
};
// CADENA CONTIENE
String.prototype.contains = function(str) {
	return (this.match(str) == str);
};
// CAMELCASE A SEPARACION POR _
// cambia texto en camelcase a texto separado por _
// uso:
// 'TextoEnCamelcase'.toUnderscore() --> 'texto_en_camelcase'
String.prototype.toUnderscore = function() {
	return this.replace(/([A-Z])/g, function($1) {
		return "_" + $1.toLowerCase();
	}).replace(/^\_/, '').replace(/\s/g, '');
};
// REPITE UNA CADENA TANTAS VECES
String.prototype.repeat = function(count) {
	var value = '';
	for ($i = 1; $i <= count; $i++) {
		value += this;
	}
	return value;
};

// CONVERSIONES
if ($.fn.datepicker) {
	// CONVERTIR TEXTO EN FECHA
	String.prototype.to_date = function(format) {
		return $.datepicker.parseDate(format, this);
	};
	// CONVERTIR FECHA EN TEXTO
	Date.prototype.to_string = function(format) {
		return $.datepicker.formatDate(format, this);
	};
}
// COMPARACION DE FECHAS
// -1 = menor
// 0 = igual
// 1 = mayor
Date.prototype.dateCompare = function(otherDate) {
	// -1 0 1 = menor igual mayor
	uno = Math.ceil(this.getTime() / (1000 * 60 * 60 * 24));
	dos = Math.ceil(otherDate.getTime() / (1000 * 60 * 60 * 24));
	if (uno == dos)
		return 0;
	if (uno < dos)
		return -1;
	else
		return 1;
};
// SUMAR FECHAS
Date.prototype.dateAdd = function(numero) {
	return new Date(this.setDate(this.getDate() + numero));
};

/*
 * //muestra la pantalla en negro con loader para pasar de una página a otra...
 * //el tiempo prudente para desaparecer el loader en caso que no haya cambio de
 * pagina function fake_ajax(tiempo){ $div = $('<div id="ajax_fake_loader"></div>')
 * .css({ width:$(document).width(), height:$(document).height(), position:
 * 'absolute',top: '0px',left: '0px', 'z-index':'99999','background-color':
 * 'black', 'filter':'alpha(opacity=70)','-moz-opacity':'0.7','-khtml-opacity':
 * '0.7','opacity': '0.7', 'text-align':'center',color: 'white',
 * 'font-weight':'bolder', 'font-size':'2em', padding:'200px'}) .html('<img
 * src="'+_WEB_ROOT+'img/ajax3.gif" alt="cargando..."/><br /><span>cargando...</span>')
 * .appendTo('body'); setTimeout(function(){ $('div#ajax_fake_loader').remove();
 * },tiempo?tiempo:3000); }
 */

// establece el objeto con focus inicial
/*
 * start_input(string_selector) start_input(jquery_obj); start_input($el, true);
 * start_input($el, {opciones});
 */
function start_input($el, opciones) {
	var _default = {
		'reindex_first' : true,
		'rebind_shortcuts' : true,
		'is_search_obj' : false
	};

	if (typeof $el == 'string') {
		$el = $($el);
		if (!$el.length)
			return false;
	}

	if (typeof opciones == 'boolean' && opciones) {
		opc = _default;
		opc.is_search_obj = true;
	} else if (typeof opciones == 'object') {
		opc = $.extend( {}, _default, opciones);
	} else {
		opc = _default;
	}

	if (opc.reindex_first) {
		reindex_inputs();
	}

	if (opc.rebind_shortcuts) {
		shortcut_rebind(true);
	}

	if (opc.is_search_obj) {
		actual_search_obj = $el.attr('id');
	}
	$el.focus();
	$el.select();
}

/*
 * parseDate valida y formatea una fecha
 * 
 * (String)date = fecha a evaluar, puede tener varios formatos: dd/mm/yyyy
 * dd/mm/yy dd/mm (String)separatorIn = caracter que contiene el separador de
 * fecha de ingreso, por defecto se toma '/' (String)separatorOut = caracter que
 * contiene el separador de fecha de salida, por defecto se toma el separador de
 * entrada
 */
function parseDate(date, separatorIn, separatorOut) {
	var fecha;
	separatorIn = typeof separatorIn == 'undefined' ? '/' : separatorIn.trim();
	separatorOut = typeof separatorOut == 'undefined' ? separatorIn
			: separatorOut.trim();

	date = date.trim();

	if ((date.indexOf(separatorIn) > -1) && (separatorIn.length == 1)
			&& (separatorIn != '/')) {
		date = date.replace(eval('/' + separatorIn + '/g'), '/');
	}

	if (date.length == 0 || typeof date == 'undefined') {
		fecha = new Date();
	} else {
		try {
			// dd/mm/yyyy
			if (/^((0[1-9])|([1-2][0-9])|(3[0-1]))\/((0[1-9])|(1[0-2]))\/((19[0-9]{2})|(2[0-1][0-9]{2}))$/
					.test(date)) {
				fecha = $.datepicker.parseDate('dd/mm/yy', date);
			}
			// dd/mm/yy
			if (/^((0[1-9])|([1-2][0-9])|(3[0-1]))\/((0[1-9])|(1[0-2]))\/[0-9]{2}$/
					.test(date)) {
				fecha = $.datepicker.parseDate('dd/mm/y', date);
			}
			// dd/mm
			if (/^((0[1-9])|([1-2][0-9])|(3[0-1]))\/((0[1-9])|(1[0-2]))$/
					.test(date)) {
				fecha = $.datepicker.parseDate('dd/mm', date);
			}
		} catch (e) {
			return false;
		}
	}

	return typeof fecha == 'undefined' ? false : $.datepicker.formatDate('dd'
			+ separatorOut + 'mm' + separatorOut + 'yy', fecha);
}

// INFORMACION DE LA PAGINA ACTUAL
if (typeof window._WEB_ROOT !== 'undefined') {
	actual = location.href.replace(_WEB_ROOT, '');
	// CONTROLLER
	location.controller = actual.split(/\//)[0].toCamel().replace(/\s/g, '') || 'Home';
	// ACTION
	location.action = actual.split(/\//)[1] || 'index';
	// PARAMS
	location.params = {};
	// URLPARAMS
	url_params = actual.split('?')[1] || '';
	if (url_params) {
		pair = url_params.split('&');
		location.params.url = {};
		for (i = 0, j = pair.length; i < j; i++) {
			location.params.url[pair[i].split('=')[0]] = pair[i].split('=')[1] || ' ';
		}
	}
	// CONTROLLER PARAMS
	test = actual.replace('?' + url_params, '');
	controller = actual.split(/\//)[0] || '';
	location.params.method_vars = [];
	if (controller) {
		test = test.substr(controller.length + 1);
		if (test.split('/').length) {
			test = test.replace(test.split('/')[0], '').replace('/', '');
			if (test.split('/').length) {
				test = test.split('/');
				for (i = 0, j = test.length; i < j; i++) {
					location.params.method_vars[i] = test[i];
				}
			}
		}
	}

	// CAKE PAGE TYPE
	location.is_addPage = location.action.toLowerCase() === 'add';
	location.is_indexPage = location.action.toLowerCase() === 'index';
	location.is_editPage = location.action.toLocaleLowerCase() === 'edit';
	location.is_viewPage = location.action.toLocaleLowerCase() === 'view';

}

/*-----------------------------------SISTEMA DE ALERTAS--------------------------*/
// MENSAJES DE TIPO MODAL
// uso: msg(mensaje, titulo, icono)
// lista de iconos: http://jqueryui.com/themeroller/
function msg(mensaje, titulo, ui_icon) {
	if (mensaje == '') {
		return;
	}
	titulo1 = '';
	if (titulo) {
		titulo1 = ' : ' + titulo;
	}
	icono = '';
	if (ui_icon) {
		icono = '<span style="float: left; margin: 0pt 7px 50px 0pt;" class="ui-icon ' + ui_icon + '"></span>';
	}
	$('<div><p>' + icono + '' + mensaje + '</p></div>').dialog( {
		'title' : 'SCPSoft' + titulo1,
		'buttons' : {
			'cerrar' : function() {
				$(this).dialog("close");
			}
		}
	});
}

// MENSAJES DE TIPO ALERTA
// uso: alerta(mensaje, titulo)
// alerta(mensaje, tipo)
// alerta(mensaje)
// alerta(mensaje, titulo, tiempo, tipo)
// alerta(mensaje, titulo, tiempo)
// alerta(mensaje, titulo, tipo)
// alerta(mensaje, tiempo)
function alerta(mensaje, titulo, tiempo, tipo) {
	icon = _WEB_ROOT + 'img/logo_mini.gif';
	function choose_icon(type) {
		switch (type.toUpperCase()) {
		case 'CRITICAL':
			icon = _WEB_ROOT + 'img/icons/tooltip/Critical.png';
			break;
		case 'HELP':
			icon = _WEB_ROOT + 'img/icons/tooltip/Help.png';
			break;
		case 'INFO':
			icon = _WEB_ROOT + 'img/icons/tooltip/Info.png';
			break;
		case 'WARNING':
			icon = _WEB_ROOT + 'img/icons/tooltip/Warning.png';
			break;
		default:
			icon = _WEB_ROOT + 'img/logo_mini.gif';
		}
	}

	if (typeof titulo == 'undefined' || titulo.length == 0) {
		titulo = 'SCPSoft';
	}

	if (typeof titulo == 'number') {
		tiempo = titulo;
		titulo = 'SCPSoft';
	} else {
		choose_icon(titulo);
		if ('CRITICAL HELP INFO WARNING'.indexOf(titulo.toUpperCase()) > -1) {
			titulo = 'SCPSoft';
		}
	}

	if (typeof tiempo == 'string') {
		choose_icon(tiempo);
		tiempo = 3000;
	} else {
		tiempo = tiempo || 3000;
	}

	if (tipo) {
		choose_icon(tipo);
	}

	return $.gritter.add( {
		title : titulo,
		text : mensaje,
		image : icon,
		fade_in_speed : 'medium', // how fast notifications fade in (string or
		// int)
		fade_out_speed : 2000, // how fast the notices fade out
		// sticky: true, // para que el mensaje se quede permanente
		time : tiempo
	// hang on the screen for...
			});
}
/*
 * //MENSAJES DE CONFIRMACION //uso: confirma(mensaje, titulo, callback) //
 * confirma(mensaje, callback) //el tÃ­tulo será SCPSoft:. function
 * confirma(mensaje, titulo, callback){ if(!mensaje.length){ alerta('No se
 * estableció el mensaje de confirmación', 'Error de javascript'); return; }
 * if(typeof titulo == 'function'){ callback = titulo; titulo = 'SCPSoft:'; }
 * if(typeof callback != 'undefined' && typeof callback != 'function'){
 * alerta('No se ha establecido la función de retorno', 'Error de javascript');
 * return; }
 * 
 * $('<div><p>'+mensaje+'</p></div>') .dialog({ 'title':titulo, 'buttons':{
 * 'Cancelar':function(){ $(this).dialog("close"); }, 'No':function(){ if
 * (typeof callback != 'undefined') callback(false); $(this).dialog("close"); },
 * 'Si':function(){ if (typeof callback != 'undefined') callback(true);
 * $(this).dialog("close"); } }, 'close':function(){ $(this).dialog('destroy'); }
 * }); }
 */
// mostrar el mensaje CAKE como modal
function show_flash() {
	$mensaje = $('#flashMessage');
	if ($mensaje.length) {
		for ( var i = 0, j = $mensaje.length; i < j; i++) {
			alerta($mensaje[i].innerHTML, 'SCPSoft');
		}
	}
}

$(function() {
	// DESAPARECER MENSAJE FLASH DE CAKE
	// uso: se carga automáticamente
	// mostrando alerta de CAKEPHP como modal
	if (systemFunctions.reemplazarMensajesCake) {
		if ($('#flashMessage').length) {
			$('#flashMessage').hide();
			show_flash();
		}

		$flash = $('#flashMessage');
		contador = '0';
		if ($flash.length) {
			contador = $flash.length.toString().blink();
		}
		$messages = $(
				'<div id="messages" style="float: right; margin: 0px 3px 3px; cursor: pointer;" class="ui-state-default ui-widget-content ui-corner-all"><span class="ui-icon ui-icon-mail-closed" style="float:left"></span><span style="float:left">' + contador + '</span></id>')
				.click(function() {
					show_flash();
					$(this).find('blink').replaceWith(function() {
						return this.innerHTML;
					});
				}).hover(function() {
					$(this).addClass('ui-state-hover');
				}, function() {
					$(this).removeClass('ui-state-hover');
				});
		$('#navigator').append($messages);
	}
	$('.decimal').change(function() {
		this.value = precision(this.value);
	}).focus(function() {
		$(this).select();
	});
});
/*------------------------------------------------------------------------------------*/

/*-----------------------------SHORTCUTS---------------------------------*/
var shortcuthint,
// AGREGANDO SHORTCUTS GLOBALES
search_objs = 'input:text + img[src*=search.png], input:text + a.lnk_buscar, input:text + a.lnk_info, input:text + a:has(img[src*=search.png]), :text + .error-message + a:has(img[src$=search.png])',
// RESERVANDO SHORTCUTS PARA LA APLICACION
shortcuts = {
	'Ctrl+R' : {
		'accion' : 'Cancelar y regresar a la página anterior',
		'objs' : 'div.actions a.lnkbutton.btnback, a.lnkbutton.btncancel',
		'callback' : function() {
			if ($('div.actions a.lnkbutton.btnback:first, div.actions a.lnkbutton.btncancel:first').length) {
				window.location = $(
						'div.actions a.lnkbutton.btnback:first, div.actions a.lnkbutton.btncancel:first')
						.attr('href');
			} else {
				return;
			}
		}
	},
	'Ctrl+G' : {
		'accion' : 'Guardar datos',
		'objs' : ':input:submit[value=Guardar]',
		'callback' : function() {
			actual_search_obj = '';
			$('form :input:submit[value=Guardar]:last').click();
			return false;
		}
	},
	'Ctrl+L' : {
		'accion' : 'Limpiar datos del formulario',
		'objs' : 'form :input:reset',
		'callback' : function() {
			if ($('form :input:reset:first').length) {
				$('form :input:reset:first').click();
			} else {
				return;
			}
		}
	},
	'Ctrl+N' : {
		'accion' : 'Nuevo registro',
		'objs' : 'div.actions a:contains(Nuevo)',
		'callback' : function() {
			if ($('div.actions a:contains(Nuevo):first').length) {
				window.location = $('div.actions a:contains(Nuevo):first')
						.attr('href');
			} else {
				return false;
			}
		}
	},
	'Ctrl+D' : {
		'accion' : 'Borrar registros',
		'objs' : 'div.actions :input:submit.btnerase, div.actions a.btnerase',
		'callback' : function() {
			btn = $('div.actions :input:submit.btnerase:first');
			if (btn.length) {
				btn.click();
			} else {
				if ($('div.actions a.btnerase:first').length) {
					window.location = $('div.actions a.btnerase:first').attr(
							'href');
				} else {
					return false;
				}
			}
		}
	},
	'Ctrl+A' : {
		'accion' : 'Anular registros',
		'objs' : 'div.actions :input:submit.btncancel',// , div.actions
		// a.btncancel',
		'callback' : function() {
			btn = $('div.actions :input:submit.btncancel:first');
			if (btn.length) {
				btn.click();
			} else {
				if ($('div.actions a.btncancel:first').length) {
					window.location = $('div.actions a.btncancel:first').attr(
							'href');
				} else {
					return false;
				}
			}
		}
	},
	'Ctrl+P' : {
		'accion' : 'Imprimir documento',
		'objs' : 'div.actions a:contains(Imprimir)',
		'callback' : function() {
			if ($('div.actions a:contains(Imprimir):first').length) {
				window.location = $('div.actions a:contains(imprimir):first')
						.click();
			} else {
				return false;
			}
		}
	},
	'Ctrl+left' : {
		'accion' : 'Ver Documento Anterior',
		'objs' : 'a.lnkbutton.btnprev',
		'callback' : function() {
			url = $('.lnkbutton.btnprev').attr('href');
			location = url;
		}
	},
	'Ctrl+right' : {
		'accion' : 'Ver Documento Siguiente',
		'objs' : 'a.lnkbutton.btnnext',
		'callback' : function() {
			url = $('.lnkbutton.btnnext').attr('href');
			location = url;
		}
	},
	'F1' : {
		'accion' : 'Ayuda del sistema (<a href="' + 'http://192.168.1.250/wiki' + '" target="_blank"><b>Ver Wiki</b></a>)',
		'objs' : '',
		'callback' : function() {
			$('#help_dialog').dialog('open');
		}
	},
	'F3' : {
		'accion' : 'Abrir bÃºsqueda en campos hábiles',
		'objs' : search_objs,
		'callback' : function() {
			if (actual_search_obj) {
				if ($('#' + actual_search_obj).data('searchButton')) {
					button = $('#' + actual_search_obj).data('searchButton');
					$button = $('#' + button);
					if ($button.length) {
						$button.trigger('click');
						return;
					}
				}
				selector = '#[obj] + img[src*=search.png]:first, #[obj] + a.lnk_buscar:first, #[obj] + a.lnk_info:first,';
				selector += '#[obj] + a:has(img[src*=search.png]), #[obj] + .error-message + a:has(img[src$=search.png])';
				selector = selector.replace(/\[obj\]/g, actual_search_obj);
				$selector = $(selector).trigger('click');
			}
		}
	}
};
// (RE)ASIGNANDO SHORTCUTS
$(function() {
	$(':text').live('focusin.enter_input_fix focusout.enter_input_fix',
			function(e) {
				// $search_inputs = $(search_objs).prev(':text');
			$search_inputs = $(search_objs).prevAll(':text');
			$input = $search_inputs.filter($(this));

			if ($input.length) {
				switch (e.type) {
				case 'focusin':
					actual_search_obj = this.id;
					break;
				case 'focusout':
					actual_search_obj = '';
					break;
				}
			}
		});
});
// force_rebind (bool:false) indicador para forzar reasignacion de shortcuts
function shortcut_rebind(force_rebind) {
	var pass = false;

	if (!shortcuts_assigned) {
		pass = true;
	} else if (typeof force_rebind == 'boolean' && force_rebind) {
		pass = true;
	}

	if (pass)
		if (typeof shortcut == 'object') {
			// verificando si existe la variable _shortcuts
			if (typeof _shortcuts == 'object') {
				shortcuts = $.extend( {}, shortcuts, _shortcuts);
			}

			// QUITANTO LOS ATAJOS ACTUALES
			for ( var i in shortcut.all_shortcuts) {
				shortcut.remove(i);
			}

			// AYUDA DEL SISTEMA
			$hdialog = $('#help_dialog');
			if ($hdialog.length)
				$hdialog.remove();

			$hdialog = $('<div id="help_dialog" style="display:none" />');
			var count = 0;
			for ( var i in shortcuts) {
				if (shortcuts[i].oculto) {
					shortcut.add(i, shortcuts[i].callback);
					continue;
				} else if (shortcuts[i].objs != ''
						&& $(shortcuts[i].objs).length == 0)
					continue;
				shortcut.add(i, shortcuts[i].callback);
				valor = '<li><b>(' + i + ')</b> ' + shortcuts[i].accion
						+ '</li>';
				$hdialog.append(valor);
				count++;
				try {
					obj = shortcuts[i].objs;
					$(obj).attr('title', function() {
						title = $(this).attr('title');
						// quitando del titulo la ayuda del shortcut
							title = title.replace(/ \([a-zA-z0-9 +]+\)/g, '');
							return (title + ' (' + i + ')').trim();
						});
				} catch (e) {
					// no existe el objeto
					continue;
				}
			}

			// mostrar acceso directo aleatorio
			var rand = random(count - 1), p = 0;

			for ( var i in shortcuts) {
				if (p == rand) {
					var shortcuthint = 'Pulsa <b>' + i + '</b> para '
							+ shortcuts[i].accion;
					$('#shortcuthint').html(shortcuthint);
					break;
				}
				p++;
			}

			$hdialog.dialog( {
				'autoOpen' : false,
				'width' : 350,
				'buttons' : {
					'Cerrar' : function() {
						$(this).dialog('close');
					}
				},
				'position' : [ 'right', 'top' ],
				'title' : 'SCPSoft: Ayuda'
			});

			shortcuts_assigned = true;
		}

}
/*------------------------------------------------------------------------------------*/

/*------------------------------VALIDACION-------------------------------------------------*/
// VALIDAR FORMULARIOS
// uso:
// $('#RuedaCodigo').attr('minlength','5').addClass('notEmpty codigo');
// $('#RuedaDescripcion').attr('minlength','5').addClass('notEmpty');
// $('#RuedaKmsCompra').attr('minlength','5').addClass('numero');
// validar()
function validar() {
	function msg(msg) {
		if (window['alertaValidacion']) {
			$.gritter.remove(window['alertaValidacion']);
		}
		window['alertaValidacion'] = alerta(msg);
	}

	// limpiando errores presentes
	$('input,textarea').bind('focus.validacion.limpiar_error', function() {
		$msg = $(this).parent().removeClass('error').find('div.error-message');
		$msg.remove();
		/*
		 * $msg.fadeTo('slow', 0.01, function(){
		 * $(this).slideUp('slow',function(){ $(this).remove(); }); });
		 */
	});

	// quitando focusout a todos los controles de validación
	// en caso que se haya hecho doble llamada a la validacion
	$(
			'input[minlength],textarea[minlength],input.notEmpty,textarea.notEmpty,input.numero,input.decimal,input.fecha,input.codigo')
			.unbind('focusout.validacion');

	// atributo minlength
	$('input[minlength],textarea[minlength]')
			.bind(
					'focusout.validacion.minLength',
					function() {
						if (this.value.trim().length < $(this)
								.attr('minlength')
								&& this.value.trim().length) {
							$(this)
									.after(
											'<div class="length error-message">longitud minima de ' + $(
													this).attr('minlength') + ' caracteres</div>');
						}
					});

	// clase notEmpty
	$('input.notEmpty,textarea.notEmpty')
			.bind(
					'focusout.validacion.notEmpty',
					function() {
						if ($(this).val().trim().length === 0) {
							$(this)
									.before(
											'<div class="notEmpty error-message" title="se requiere este valor"><strong>*</styrong></div>');
						}
					});

	// clase numero
	$('input.numero')
			.bind(
					'focusout.validacion.numero',
					function() {
						numero = /^(\d{1,14}?)$/;
						if (!numero.test(this.value)
								&& this.value.trim().length) {
							$(this)
									.after(
											'<div class="numero error-message">el valor debe ser numÃ©rico</div>');
						}
					});

	// clase decimal
	$('input.decimal')
			.bind(
					'focusout.validacion.decimal',
					function() {
						numero = /^(\d{1,10}?[.]{0,1}?\d{0,4}?)$/;
						if (!numero.test(this.value)
								&& this.value.trim().length) {
							$(this)
									.after(
											'<div class="numero error-message">el valor debe ser numÃ©rico</div>');
						}
					});

	// clase fecha
	$('input.fecha')
			.bind(
					'focusout.validacion.fecha',
					function() {
						numero = /^(\d{2}?[\/]{1}?\d{2}?[\/]{1}?\d{4}?)$|^(\d{2}?[\-]{1}?\d{2}?[\-]{1}?\d{4}?)$/;
						if (!numero.test(this.value)
								&& this.value.trim().length) {
							$(this)
									.after(
											'<div class="numero error-message">el valor debe ser fecha</div>');
						}
					});

	// clase codigo
	$('input.codigo')
			.bind(
					'focusout.validacion.codigo',
					function() {
						codigo = /^[a-zA-Z0-9]*$/;
						if (!codigo.test(this.value)
								&& this.value.trim().length) {
							$(this)
									.after(
											'<div class="codigo error-message">el código solo puede tener numeros y letras</div>');
						}
					});

	// clase email
	$('input.email')
			.bind(
					'focusout.validacion.email',
					function() {
						codigo = /^[a-z0-9._%+\-]+@(?:[a-z0-9\-]+\.)+[a-z]{2,4}$/;
						if (!codigo.test(this.value)
								&& this.value.trim().length) {
							$(this)
									.after(
											'<div class="email error-message">el formato de email es incorrecto</div>');
						}
					});

	// clase telefono
	$('input.telefono')
			.bind(
					'focusout.validacion.telefono',
					function() {
						codigo = /^((\+?\d{2,3}|\(\d{2,3}\))[\s\-]+){0,2}(\d+){6,11}(\s+\d{2,4})?/;
						if (!codigo.test(this.value)
								&& this.value.trim().length) {
							$(this)
									.after(
											'<div class="telefono error-message">el formato de telÃ©fono es incorrecto</div>');
						}
					});

	// animando los errores
	$('input,textarea').bind('focusout.validacion.animacion', function() {
		$(this).parent().find('div.error-message').hide().fadeIn('slow').end();
	});

	// boton de envio
	$('input:submit.btnsave')
			.bind('click.validacion', function() {
				// verificando que todos los campos requeridos hayan
					// sido satisfechos
					bValidoOk = true;
					$('input.notEmpty,textarea.notEmpty')
							.each(
									function() {
										if ($(this).val().length === 0) {
											bValidoOk = false;
											if (!$(this).siblings(
													'div.notEmpty').length) {
												$(this)
														.after(
																'<div class="notEmpty error-message">se requiere este valor</div>');
											}
										}
									});
					if (!bValidoOk) {
						msg('hay campos requeridos', 'SCPSoft dice:');
						return false;
					}

					errores = $('input:submit.btnsave').parents('form').find(
							'div.error-message').length;
					if (errores > 0) {
						msg('tiene ' + errores + ' errores por corregir',
								'SCPSoft dice:');
						return false;
					} else {
						return true;
					}
				});
}
/*------------------------------------------------------------------------------------*/
/*
 * //BLOQUEAR PORCIONES DE LA PÃ�GINA //bloquea porciones de una página
 * agregando una capa transparente sobre ella //sintaxis: // // blockme(string
 * id_objeto, int tiempo_para_desaparecer=1500, bool usar_imagen_loader) //
 * blockme(string id_objeto, int tiempo_para_desaparecer=1500, string imagen a
 * usar) //uso: // blockme('addform') //bloquea por 1.5 segundos //
 * blockme('addform', 5000) //bloquea por 5 segundos // blockme('addform', 4000,
 * true) //bloquea con imagen loader por defecto por 4 segundos //
 * blockme('addform', 4000, 'ajax1.gif') //bloquea con imagen loader especÃ­fico
 * por 4 segundos function blockme(obj, timeout, loader){ if(typeof obj !=
 * 'string'){return false;}
 * 
 * $obj = $('#'+obj); if(!$obj.length){return false;}
 * 
 * var randomnumber=Math.floor(Math.random()*11); if(!timeout){timeout = 1500;}
 * 
 * if(!loader){loader='';} else{ if(typeof loader === 'string'){ loader = '<img
 * src="'+_WEB_ROOT+'img/'+ loader +'" />'; } else { loader = '<img
 * src="'+_WEB_ROOT+'img/ajax3.gif" />'; } } $blockme = $('<div id="blockme' +
 * randomnumber +'" />') .css({ 'text-align' : 'center', 'background-color' :
 * '#000000', 'width' : $obj.width(), 'height' : $obj.height(), 'position' :
 * 'absolute', 'top' : $obj.offset().top, 'left' : $obj.offset().left, 'filter' :
 * 'alpha(opacity=70)', '-moz-opacity' : '0.7', '-khtml-opacity' : '0.7',
 * 'opacity' : '0.7', 'z-index' : 1003, 'display' : 'none' }) .html(loader)
 * .prependTo($obj) .fadeIn('slow',function(){ setTimeout('unblockme("' +obj+
 * '")', timeout); }); }
 * 
 * //DESBLOQUEAR OBJETOS BLOQUEADOS //desbloquea objetos que han sido bloqueados
 * //sintaxis: // unblockme(string id_objeto_bloqueado) //uso: //
 * unblockme('addform') function unblockme(obj){
 * $('#'+obj).find('div[id^=blockme]').fadeOut('slow',function(){
 * $(this).remove(); }); }
 * 
 * //DESBLOQUEAR TODOS LOS OBJETOS BLOQUEADOS //uso: // unblockall() function
 * unblockall(){ $('div[id^=blockme]').remove(); }
 */

// verifica si los checks dentro de las páginas index han sido seleccionados
// antes de realizar la petición de envio
function verifica_checks() {
	$lista_chk_borrado = $('input:checkbox', '#resultados tbody');
	flag = true; // override si la página no está dentro de los estándares
	if ($lista_chk_borrado.length) {
		flag = false;
		for ( var i = 0, j = $lista_chk_borrado.length; i < j; i++) {
			$chk = $lista_chk_borrado[i];
			if ($chk.checked) {
				flag = true;
				break;
			}
		}
		if (!flag) {
			$.gritter.add( {
				// (string | mandatory) the heading of the notification
				title : 'SCPSoft',
				// (string | mandatory) the text inside the notification
				text : 'Debe seleccionar registros para procesar',
				time : 2000,
				image : _WEB_ROOT + 'img/logo_mini.gif'
			});
			// msg('Debe seleccionar registros para
			// procesar','Información','ui-icon-info');
		}
	}
	return flag;
}

/*---------------------------FIX PARA TECLAS ----------------------------*/
var tabindex = 1, // contedo de objetos indexables
actualtab = 1, // indice actual
mouse_over_submit = false;

// funcion para reindexar los inputs visibles. (muy util cuando se crean campos
// en tiempo de ejecucion)
// $inputs = lista de objetos manual
// ejemplos
// reindex_inputs(); //indexar todos los elementos visibles
// reindex_inputs($(':text')); //indexar solo campos tipo text
// reindex_inputs($('#btnGuardar'), true); //agregar al Ã­ndice el boton Guardar
function reindex_inputs($inputs, appendToList) {
	$_inputs = $(':input:visible:not(:button,:submit,:reset,[readonly],[disabled])');
	if (typeof appendToList == 'boolean' && appendToList === true) {
		$inputs = $_inputs.add($inputs);
	} else if (typeof $inputs == 'undefined' || !$inputs.length) {
		$inputs = $_inputs;
	}

	tabindex = $inputs.length;
	$actual = $('[tabindex]');
	if ($actual.length) {
		$actual.removeAttr('tabindex');
		// quitar el evento focus.index
		$actual.unbind('focus.index');
	}
	for ( var i = 0, j = $inputs.length; i < j; i++) {
		$inputs[i].tabIndex = i + 1;
	}
	// asegurando que actualtab estÃ© siempre actualizado
	$inputs.bind( {
		'focus.index' : function() {
			actualtab = this.tabIndex;
		}
	});
}

$(function() {
	reindex_inputs();

	$(document).bind('keydown.enter_fix', function(e) {
		if (!$('.ui-dialog:visible').length) {
			var tecla = (document.all) ? e.keyCode : e.which; // por
			// compatibilidad
			// con IE y
			// Firefox
			var $input_actual = $('[tabindex=' + actualtab + ']');

			switch (tecla) {
			// case 9: //tab
			case 13: // enter

				if ($input_actual.attr('type') == 'submit') {
					return true;
				}
				if ($input_actual.parent().children(
						'input:submit[value=Buscar]').length > 0) {
					return true;
				}

				actualtab++;
				if (actualtab > tabindex) {
					actualtab = 1;
				}

				// ejecutando eventos del control anterior
				eventos = $input_actual.data('events');
				if (eventos['change']) {
					$input_actual.trigger('change');
				}
				if (eventos['blur']) {
					$input_actual.trigger('blur');
				}
				if (eventos['click']) {
					$input_actual.trigger('click');
				}

				$('[tabindex=' + actualtab + ']').focus();
				$('[tabindex=' + actualtab + ']').select();

				// fix para jQuery.adcReport
				test = $('#adc_report:visible :input:last');
				if (test.length) {
					$('#adc_report').parents('.ui-dialog:first').find(
							':button:contains(Ver)').click();
				}

				return false;
				break;
			// default:

			}
		}
	});

	// FIX para bug de plugin buscarProveedor... obliga al submit final a hacer
	// click al presionar enter
	$(':submit[value=Guardar]')
			.bind(
					'click.fix_bp mouseover.fix_bp mouseout.fix_bp',
					function(e) {
						if (jQuery.buscarProveedor || jQuery.fn.buscarProveedor) {
							switch (e.type) {
							case 'mouseover':
								mouse_over_submit = true;
								break;
							case 'mouseout':
								mouse_over_submit = false;
								break;
							case 'click':
								if (mouse_over_submit) {
									return true;
								} else {
									if (!actual_search_obj) {
										return true;
									} else {
										is_plugin = $('#' + actual_search_obj);
										if (is_plugin.length
												&& is_plugin
														.hasClass('has_buscar_proveedor')) {
											return false;
										} else {
											return true;
										}
									}
								}
								break;
							}
						}
					});

	// $('input,select,textarea').each(function() {
	// if (this.type != "hidden" && this.type != "submit" &&
	// this.type != "button" && this.type != "reset" &&
	// !$(this).attr('readonly') && $(this).is(':visible') &&
	// !$(this).is(':disabled') ) {
	// $(this).attr("tabindex", tabindex);
	// tabindex++;
	// }
	// });

	// cambia el tab por enter
	/*
	 * $(document).keydown(function(e){ tecla = (document.all) ? e.keyCode :
	 * e.which; // por compatibilidad con IE y Firefox if (tecla == 13) {
	 * //verificando si existe un dialogo abierto
	 * if($('.ui-dialog:visible').length){
	 * //$('.ui-dialog:visible').find('button:contains(Buscar)').click() } else {
	 * var follow = true, submit = false; do{ var obj = $("[tabindex=" +
	 * actualtab + "]"); if (obj.parent().children('input:submit[value=Guardar],
	 * input:submit[value=Grabar]').length > 0) { submit = true; break; }
	 * actualtab++; if (actualtab >= tabindex) actualtab = 1;
	 * 
	 * obj = $("[tabindex=" + actualtab + "]"); var dis = obj.attr('disabled'),
	 * ro = obj.attr('readonly'); follow = dis && ro; } while (follow); if
	 * (!submit){ $controlPrevio = $("[tabindex=" + (actualtab -1) + "]");
	 * eventosPrevios = $controlPrevio.data('events');
	 * 
	 * if(eventosPrevios['blur']){ $controlPrevio.trigger('blur'); } //
	 * if(eventosPrevios['change']){ // $controlPrevio.trigger('change'); // }
	 * 
	 * $("[tabindex=" + actualtab + "]").focus(); e.preventDefault(); return
	 * false; } } } });
	 */
});
/*------------------------------------------------------------------------------------*/

/*-------------------------INICIO DE EVENTOS DE PAGINA--------------------------------*/
$(function() {
	// focus al primer input habil disponible
	$(":input[tabindex=1]").focus();

	// REEMPLAZO DE CONFIRM PARA BORRADO DE DATOS EN ENLACES
	$a_delete = $('a[href*="/delete/"],a[href*="/cancel/"],a[href*="/process/"],a[href*="/cierreFacturacion"]');
	// verifica si existen enlaces
	if ($a_delete.length) {
		$a_delete
		// quitando el evento onclick que fue aÃ±adido por CakePHP
				.removeAttr('onclick')
				// agregando el evento click
				.click(
						function(e) {
							e.preventDefault();
							href = $(this).attr('href');
							$('<div>Â¿SEGURO DESEA REALIZAR ESTA ACCION?</div>')
									.dialog( {
										title : 'SCPSoft:Confirmación',
										modal : true,
										buttons : {
											Cancelar : function() {
												$(this).dialog('close');
												return false;
											},
											Aceptar : function() {
												$(this).dialog('close');
												if ($.trim(href) != '')
													window.location = href;
												else
													return true;
											}
										}
									});
						});
	}

	// REEMPLADO DE CONFIRM PARA BORRADO DE DATOS EN FORMULARIOS POR LOTES
	$submit_borrar_cancelar = $('input:submit.btnerase,input:submit.btncancel,input:submit.btnchkcobrado,,input:submit.btnchkextorna');
	if ($submit_borrar_cancelar.length) {
		$submit_borrar_cancelar
				.removeAttr('onclick')
				.click(
						function(e) {
							e.preventDefault();
							if (verifica_checks()) {
								$boton = $(this);
								$(
										'<div>¿SEGURO DESEA REALIZAR ESTA ACCION?</div>')
										.dialog(
												{
													title : 'SCPSoft:Confirmación',
													modal : true,
													buttons : {
														Cancelar : function() {
															$(this).dialog(
																	'close');
														},
														Aceptar : function() {
															$(this).dialog(
																	'close');
															$process = $('form[action$="/delete"]');
															if ($process.length) {
																$process
																		.submit();
															}
															$process = $('form[action$="/process"]');
															if ($process.length) {
																// agregando
																// objetos
																// ocultos para
																// reemplazar el
																// valor que no
																// se envÃ­a por
																// el mismo clic
																// del botón
																if ($boton
																		.hasClass('btncancel')) {
																	$process
																			.prepend('<input type="hidden" name="cancel" value="Anular" />');
																} else if ($boton
																		.hasClass('btnerase')) {
																	$process
																			.prepend('<input type="hidden" name="delete" value="Eliminar" />');
																} else if ($boton
																		.hasClass('btnchkcobrado')) {
																	$process
																			.prepend('<input type="hidden" name="extracto" value="Extracto" />');
																} else if ($boton
																		.hasClass('btnchkextorna')) {
																	$process
																			.prepend('<input type="hidden" name="extornar" value="Extornar" />');
																}
																$process
																		.submit();
															}
															// fake_ajax(5000);
														}
													}
												});
							}
						});
	}
});

$(function() {
	shortcut_rebind();
});

/* EXTENSIONES PARA HELPERS */
/* TextDateHelper */
function TextDateHelperFn(event, element) {
	el = $(element);
	function msg(msg) {
		if (!alerta) {
			alert('SCPSoft::Validación\n-------------------------\n\t' + msg);
		} else {
			if (window['alertaTextDateHelperFn']) {
				$.gritter.remove(window['alertaTextDateHelperFn']);
			}
			window['alertaTextDateHelperFn'] = alerta(msg);
		}
	}

	switch (event.type) {
	case 'focusin':
		if (el.attr('enablecero') && element.value == '00/00/0000') {
			element.value = '';
		} else {
			el.select();
		}
		break;
	case 'change':
	case 'focusout':
		var value;

		if (element.value.length > 0) {
			value = parseDate(element.value);
		}

		if (value) {
			el.val(value);
			vals = el.siblings(':hidden[id^=' + element.id + ']');
			vals.filter('[id$=Day]').val(value.split('/')[0]);
			vals.filter('[id$=Month]').val(value.split('/')[1]);
			vals.filter('[id$=Year]').val(value.split('/')[2]);

		} else if (el.attr('enablecero') && !value) {
			element.value = '00/00/0000';
		} else {
			element.value = '';
			msg('formato de fecha incorrecta');
		}
		break;
	}
}
$(function() {
	$('.TextDateHelper').bind('change.TextDateHelper', function(e) {
		TextDateHelperFn(e, this);
	}).live('focusin.TextDateHelper focusout.TextDateHelper', function(e) {
		TextDateHelperFn(e, this);
	});
});

// ----------------funcionalidad para llamadas ajax hechas x el helper
// 'codigo'------------------------------------
var override_codigo_helper_xhr = false, codigo_helper_xhr = {
	activo : false,
	inputs : []
};

function _xhr_validate() {
	codigo_helper_xhr.activo = false;
	codigo_helper_xhr.inputs = [];
	function msg(msg, title, type) {
		if (!alerta) {
			alert(title + '\n\n\t' + msg);
		} else {
			if (window['alerta_xhr_validate']) {
				$.gritter.remove(window['alerta_xhr_validate']);
			}
			window['alerta_xhr_validate'] = alerta(msg, title, type);
		}
	}
	for ( var i in window) {
		if (i.substr(-3) == 'XHR') {
			if (window[i] && window[i].readyState != 4) {
				codigo_helper_xhr.activo = true;
				codigo_helper_xhr.inputs[codigo_helper_xhr.inputs.length] = i
						.substr(i.length - 3);
			}
		}
	}
	if (codigo_helper_xhr.activo && !override_codigo_helper_xhr) {
		if (!$('div.gritter-item:contains(por favor aguarde unos segundos a que terminen las llamadas remotas)').length) {
			msg(
					'por favor aguarde unos segundos a que terminen las llamadas remotas',
					'SCPSoft::Validacion', 'Critical');
		}
		return false;
	}
}

$(function() {
	if (systemFunctions.esperarAjax) {
		$('form').bind('submit.xhr_validate', _xhr_validate);
		$('input:submit[value=Guardar]').bind('click.xhr_validate',
				_xhr_validate);
	}
});

// -------------------------------------------------------------------------------------------------
// MENU FLOTANTE
function construct_floating_menu() {
	if (localStorage['leftPanel'] && localStorage['leftPanel'] != 'null') {
		$(
				'<style>.-hidden{display:none;}#leftPanel{padding-right:5px;-moz-box-shadow:0 0 1em gray;-webkit-box-shadow:0 0 1em gray;box-shadow:0 0 1em gray}#leftPanel #acc1 div a{clear: left;display: block;margin-left: -20px;}#leftPanel ul li{position: relative;clear:left;cursor:pointer;float:left;left: -35px;list-style-type: none;width: 150px;}</style>')
				.appendTo('head');

		$(
				'<div id="leftPanel" style="opacity:0.6;background-color:#0B4B84;position:absolute;left:0px;top:20px;width:15px;height:60px;overflow:auto;" class="ui-corner-right" />')
				.html(localStorage['leftPanel'])
				.appendTo('body')
				.find('#acc1')
				.accordion( {
					autoHeight : false,
					change : function() {
						localStorage['leftPanel'] = $('#leftPanel').html();
					}
				})
				.end()
				.find('#acc1 div a,#acc1 div ul li a')
				.hover(function() {
					$(this).addClass('ui-state-hover').css( {
						'font-weight' : 'normal'
					});
				}, function() {
					$(this).removeClass('ui-state-hover');
				})
				.end()
				.find('h3:first')
				.addClass(
						'ui-accordion-header ui-helper-reset ui-state-active ui-corner-top')
				.end().find('#acc1 div a').click(function() {
					var href = $(this).attr('href');
					href = href.substring(href.length - 1);
					if (href == '#') {
						$(this).next(this).toggle(100);
						return false;
					}
				}).end().find('*:visible').addClass('-hidden').hide().end()
				.click(
						function() {
							$(this).stop().animate(
									{
										width : '220px',
										height : '600px',
										backgroundColor : '#FFFFFF',
										opacity : '1'
									},
									'normal',
									function() {
										$(this).find('.-hidden').removeClass(
												'-hidden').show().end();
									});
						}).mouseleave(
						function() {
							$(this).find('*:visible').addClass('-hidden')
									.hide().end().stop().animate( {
										width : '15px',
										height : '60px',
										backgroundColor : '#0B4B84',
										opacity : '0.6'
									}, 'normal');
						});
		// .hover(function(){
		// $(this)
		// .stop()
		// .animate({
		// width:'220px',
		// height:'600px',
		// backgroundColor:'#FFFFFF',
		// opacity:'1'
		// },'normal',function(){
		// $(this)
		// .find('.-hidden').removeClass('-hidden').show().end()
		// });
		// },function(){
		// $(this)
		// .find('*:visible').addClass('-hidden').hide().end()
		// .stop()
		// .animate({
		// //width:'20px',
		// width:'15px',
		// height:'100px',
		// backgroundColor:'#0B4B84',
		// opacity:'0.6'
		// },'normal');
		// });

		// load report dialogs
		$.getScript(_WEB_ROOT + 'js/home-dialogs.js');
	}
}

function build_menu() {
	if (!systemFunctions.buildMenuOffHome) {
		return false;
	}
	if (localStorage['tipoIngresos'] && localStorage['tipoSalidas']
			&& localStorage['tipoTransferencias']
			&& localStorage['tipoDocumentos'] && localStorage['almacenes']
			&& localStorage['tipoProduc']) {
		window.tipoIngresos = JSON.parse(localStorage['tipoIngresos']);
		window.tipoSalida = JSON.parse(localStorage['tipoSalidas']);
		window.tipoTransferencias = JSON
				.parse(localStorage['tipoTransferencias']);
		window.tipoDocumentos = JSON.parse(localStorage['tipoDocumentos']);
		window.almacenes = JSON.parse(localStorage['almacenes']);
		window.almacenes_locales = JSON
				.parse(localStorage['almacenes_locales']);
		window.tipoProduc = JSON.parse(localStorage['tipoProduc']);
	}

	if (!$.fn.adcReport) {
		$.getScript(_WEB_ROOT + 'js/jquery.adc_report.js', function() {
			construct_floating_menu();
		});
	} else {
		construct_floating_menu();
	}
}

// LOGOUT
$(function() {
	$('.cerrarSesion a').click(function(e) {
		localStorage.clear();
	});

	// verificando si está en linea
	$(window)
			.bind('online offline', function(e) {
				status = navigator.onLine ? "Online" : "Offline";
				if (status == 'Offline') {
					$('#navigator').animate( {
						backgroundColor : '#ff6666'
					}, 1500);
					// alerta('la aplicación no cuenta con conexion al
					// servidor','SCPSoft::Error de
					// conexion','Critical');
					alert('SCPSoft::Error de conexion\n--------------------------------------\n\tLa aplicación no cuenta con conexion al servidor\n\tPor favor no cambie de página mientras se restablece la comunicación.');
					$('.actions').hide();
				} else {
					$('#navigator').css('backgroundColor', 'transparent');
					$('.actions').show();
				}
			});
});

// VALIDANDO QUE EL USUARIO NO HAYA CAMBIADO DE ALMACEN EN OTRA VENTANA
$(function() {
	if (systemFunctions.actualizarPaginasOnCambiarUbicacion) {
		$(window)
				.focus(
						function() {
							if (window.almacenes && localStorage.almacenes) {
								if (JSON.stringify(almacenes) !== localStorage.almacenes) {
									alerta(
											'La página se cargará de nuevo pues se detectó cambio de almacen en otra página',
											'info');
									location.reload();
								}
							}
						});
	}
});

// CAMBIAR UBICACION
var _ubicacion_timeout;
function launch_ubicacion_select_timeout(just_clear) {
	if (_ubicacion_timeout) {
		clearTimeout(_ubicacion_timeout);
	}
	if (just_clear == true)
		return true;
	_ubicacion_timeout = setTimeout(function() {
		$('.ubicacion .ui-icon-close').click();
	}, 4000);
}

$(function() {
	if (systemFunctions.cambiarUbicacion) {
		$('.ubicacion')
				.dblclick(
						function() {
							if (localStorage.selector) {
								$(this)
										.data('ubicacion',
												$('.ubicacion').html())
										.html(localStorage.selector)
										.css('padding', '0px')
										.find('tr')
										.append(
												'<td><span class="ui-icon ui-corner-all ui-icon-close" title="Cerrar"></span></td>')
										.end()
										.find('.ui-icon-close')
										.css('cursor', 'pointer')
										.bind(
												'mouseenter mouseleave',
												function() {
													$(this).toggleClass(
															'ui-state-hover');
												})
										.click(
												function() {
													$('.ubicacion')
															.removeAttr('style')
															.html(
																	$(
																			'.ubicacion')
																			.data(
																					'ubicacion'));
												})
										.end()
										.find('*')
										.css('font-size', '0.97em')
										.end()
										.find('img')
										.remove()
										.end()
										.find('.datepicker')
										.removeClass('hasDatepicker')
										.removeAttr('id')
										.datepicker(
												{
													dateFormat : 'dd/mm/yy',
													buttonImage : _WEB_ROOT + 'img/calendar.png',
													buttonImageOnly : true,
													duration : '',
													showOn : 'button',
													changeMonth : true,
													changeYear : true,
													dayNamesMin : [ 'Dom',
															'Lun', 'Mar',
															'Mi&eacute;',
															'Jue', 'Vie', 'Sab' ],
													monthNamesShort : [ 'Ene',
															'Feb', 'Mar',
															'Abr', 'May',
															'Jun', 'Jul',
															'Ago', 'Set',
															'Oct', 'Nov', 'Dic' ],
													onSelect : function(
															sel_date) {
														$(this).siblings(
																'input').val(
																sel_date)
																.change();
													},
													beforeShow : function() {
														launch_ubicacion_select_timeout(true);
														$(this)
																.val(
																		$(this)
																				.siblings(
																						'input')
																				.val());
														return {};
													}
												})
										.end()
										.find('#EmpresaEmpresaId')
										.change(
												function() {
													launch_ubicacion_select_timeout(true);
													if (window['alertaEmpresaEmpresaId']) {
														$.gritter
																.remove(window['alertaEmpresaEmpresaId']);
													}
													window['alertaEmpresaEmpresaId'] = alerta(
															'Cargando datos...',
															5000);

													$
															.post(
																	_WEB_ROOT + 'home/ajax',
																	{
																		action : 1,
																		value : $(
																				this)
																				.val()
																	},
																	function(
																			data) {
																		var item = '<option value="$1">$2</option>\n';
																		var res = item
																				.replace(
																						'$1',
																						'-1" selected="selected')
																				.replace(
																						'$2',
																						'-Seleccione-');
																		for ( var i = 0; i < data.length; i++) {
																			if (data[i] != undefined) {
																				res += item
																						.replace(
																								'$1',
																								data[i].CentroDist.id)
																						.replace(
																								'$2',
																								data[i].CentroDist.descripcion);
																			}
																		}
																		$(
																				'#EmpresaCentroDistId')
																				.html(
																						res);
																		launch_ubicacion_select_timeout();
																	});
												})
										.end()
										.find('#EmpresaCentroDistId')
										.find('option')
										.removeAttr('selected')
										.end()
										.prepend(
												'<option value="-1" selected="selected">-seleccione-</option>')
										.change(
												function() {
													if (window['alertaEmpresaCentroDistId']) {
														$.gritter
																.remove(window['alertaEmpresaCentroDistId']);
													}
													window['alertaEmpresaCentroDistId'] = alerta(
															'Atención se recargará la página para actualizar los datos',
															5000);

													launch_ubicacion_select_timeout();
													$
															.post(
																	_WEB_ROOT + 'home/ajax',
																	{
																		action : 2,
																		value : $(
																				this)
																				.val()
																	},
																	function(
																			data) {
																		window.almacenes = JSLINQ(
																				data)
																				.Select(
																						function(
																								i) {
																							return {
																								'value' : i.Almacene.id,
																								'text' : i.Almacene.codigo
																										+ ' '
																										+ i.Almacene.descripcion
																							};
																						}).items;
																		localStorage.almacenes = JSON
																				.stringify(almacenes);
																		$
																				.post(
																						_WEB_ROOT + 'home/ajax',
																						{
																							action : 5
																						},
																						function(
																								data) {
																							window.almacenes_locales = JSLINQ(
																									data)
																									.Select(
																											function(
																													i) {
																												return {
																													'value' : i.Almacene.id,
																													'text' : i.Almacene.codigo
																															+ ' '
																															+ i.Almacene.descripcion
																												};
																											}).items;
																							localStorage.almacenes_locales = JSON
																									.stringify(almacenes_locales);
																							window.location = window.location.href;
																						});
																	});
												})
										.end()
										.find('#EmpresaFecha')
										.change(
												function() {
													if (window['alertaEmpresaFecha']) {
														$.gritter
																.remove(window['alertaEmpresaFecha']);
													}
													window['alertaEmpresaFecha'] = alerta(
															'Atención se recargará la página para actualizar los datos',
															5000);
													launch_ubicacion_select_timeout();
													$
															.post(
																	_WEB_ROOT + 'home/ajax',
																	{
																		action : 3,
																		value : $(
																				this)
																				.val()
																	},
																	function(
																			data) {
																		window.location = window.location.href;
																	});
												}).end();
								launch_ubicacion_select_timeout();
							}
						});
	}

});